<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // // 1、函数的多面性 function 可以是函数 也可以是对象，还可以是自定义构造函数
        // function fn(){
        //     console.log('函数的多面性')
        // }
        // // 普通调用
        // fn()
        // // 函数 也是对象
        // fn.age= 20;
        // console.log(fn.age)
        // // 函数也可以是构造函数
        // console.log(new fn())

        // 2、函数与构造函数的区别  一般每次创建一个function 就已经决定这个function应该怎么使用   普通函数名称一般使用小驼峰 构造函数名称一般使用大驼峰
        // function Person(){
        //     // let obj = new Object;
        //     // let this = obj;
        //     console.log('aaa')
        // }
        // // 构造函数 需要与new关键字配合  new 关键字  Person是构造函数名称 最后的()是可选 如果需要传递参数()必须使用 否则 可以省略
        // let p = new Person();
        // /*
        //     一旦new构造函数 系统会自动的执行一些语句
        //     new Person()系统执行的步骤
        //     1、以当前构造函数名称创建一个对象 可以理解为 let obj = new Object
        //     2、将this执行到obj 等价于 执行 let this = obj 
        //     3、执行构造函数中的代码(注意 借助于他可以实现对对象进行属性的赋值)
        //     4、自动将对象返回  等价于 执行了return obj
        //     当一个function作为构造函数使用时 不要手动的return(主体代码在属性值为函数时可以return)
        // */ 

        // console.log(p);

        // 3、构造函数中this 是谁k
        // function Person(){
        //     // let obj  = new Object
        //     // let this = obj;
        //     console.log(this);
        //     // 因为目前this是对象 使用对象语法 加属性
        //     this.name = '张三';
        //     this.run = function(){
        //         console.log(this.name)
        //     }
        //     // return obj
        // }
        // let p = new Person();
        // console.log(p)
        // p.run()
        function Person(name,age){
            // 将传递的name变量的值赋值给当前对象下的name的属性
            this.name = name;
            this.age = age;
            this.hello = function(){
                // 谁在调用hello这个方法  this就是谁
                console.log('名字：'+this.name)
            }
        }
        let p = new Person('张三',20);
        console.log(p);
        p.hello();//p对象在调用hello方法 所以方法中的this表示的是p对象
        let p2 = new Person('小米',40);
        p2.hello()
    </script>
</body>
</html>